package com.zz;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Arrays;

public class App {

	public static void start(String[] args) {
		// 校验文件夹路径
		File videoDir = checkArgs(args);
		// 生成markdown代码
		StringBuilder sb = generateMarkdownCode(videoDir);
		System.out.println("sb = " + sb);
		// 创建markdown文件并写入markdown代码
		generateMarkdownFile(videoDir, sb);
	}

	/**
	 创建markdown文件并写入markdown代码
	 markdown文件名与视频文件夹相同，保存在视频文件夹下
	 @param videoDir videoDir
	 @param sb       sb
	 */
	private static void generateMarkdownFile(File videoDir, StringBuilder sb) {
		String videoDirName = videoDir.getName();
		File mdFile = new File(videoDir, videoDirName + ".md");
		try {
			boolean newResult = mdFile.createNewFile();
			if (newResult) {
				FileWriter writer = new FileWriter(mdFile);
				writer.write(sb.toString());
				writer.flush();
				writer.close();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 生成Markdown代码
	 @param videoDir videoDir
	 @return markdownCode
	 */
	private static StringBuilder generateMarkdownCode(File videoDir) {
		String[] videoNameList = videoDir.list();
		if (videoNameList == null) {
			throw new NullPointerException("视频文件名中没有文件");
		}
		Arrays.sort(videoNameList); // 文件名按自然排序
		StringBuilder sb = new StringBuilder();

		// 拼接文件头
		sb
				.append("[TOC]").append(System.lineSeparator()) // TOC
				.append(System.lineSeparator()) // 空行
				.append("### 00__TODO").append(System.lineSeparator()) // 00__TODO
				.append(System.lineSeparator()) // 空行
				.append("### 00__技巧").append(System.lineSeparator()) // 00__技巧
				.append(System.lineSeparator()) // 空行
				.append("### 00__错误").append(System.lineSeparator()) // 00__错误
				.append(System.lineSeparator()) // 空行
				.append(System.lineSeparator()) // 空行
				.append(System.lineSeparator()) // 空行
		;
		// 拼接内容
		for (String videoName : videoNameList) {
			sb
					.append("### ").append(getFileNameNoEx(videoName)).append(System.lineSeparator()) // ### 0101__今日内容
					.append(System.lineSeparator()) // 空行
					.append("- ").append(System.lineSeparator())
					.append(System.lineSeparator()) // 空行
					.append("\t-----").append(System.lineSeparator()) // 分隔线
					.append(System.lineSeparator()) // 空行
					.append("- ").append(System.lineSeparator())
					.append(System.lineSeparator()) // 空行
			;
		}

		return sb;
	}

	/**
	 校验args
	 必须传递一个参数：视频文件夹路径
	 */
	private static File checkArgs(String[] args) throws IllegalArgumentException {
		if (args == null || args.length != 1) {
			throw new IllegalArgumentException("请输入合法的 视频文件夹 全路径！");
		}
		File videoDir = new File(args[0]); // 以参数创建File
		if (!videoDir.exists()) {
			throw new IllegalArgumentException("请输入合法的 视频文件夹 全路径！");
		}
		if (!videoDir.isDirectory()) {
			throw new IllegalArgumentException("只能操作文件夹！");
		}

		return videoDir;
	}

	/**
	 获取文件名（不带扩展名）
	 @param filename filename
	 @return filenameNoEx
	 */
	public static String getFileNameNoEx(String filename) {
		if ((filename != null) && (filename.length() > 0)) {
			int dot = filename.lastIndexOf('.');
			if ((dot > -1) && (dot < (filename.length()))) {
				return filename.substring(0, dot);
			}
		}
		return filename;
	}
}
